/*
 * object_loader.c
 *
 *  Created on: 12/05/2013
 *      Author: alex
 */


#include "object_loader.h"

objeto_t cargar_objeto(char* ruta)
{
	FILE *archivo;
	char cadena[256];

	objeto_t objeto;
	objeto.num_superficies = objeto.num_vertices = 0;
	objeto.superficies = NULL;
	objeto.vertices = NULL;

	// Intenta abrir el archivo .obj
	if ((archivo = fopen(ruta,"r")) == NULL)
	{
		printf("No se puede abrir el archivo %s\n",ruta);
		return objeto;
	}

	// Hace un primer recorrido para obtener la cantidad de superficies y vértices
	while (feof(archivo)==0)
	{
		fscanf(archivo,"%s",cadena);

		if (strcmp(cadena, "v") == 0)
			objeto.num_vertices++;

		if (strcmp(cadena, "f") == 0)
			objeto.num_superficies++;
	}

	// Reserva la memoria para los vértices y las superficies
	objeto.vertices = (vertice_t*)malloc(objeto.num_vertices * sizeof(vertice_t));
	objeto.superficies = (superficie_t*)malloc(objeto.num_superficies * sizeof(superficie_t));

	// Recorre otra vez el archivo almacenando los datos de los vértices y superficies
	rewind(archivo);
	int vertice = 0;
	int superficie = 0;
	while (feof(archivo)==0)
	{
		fscanf(archivo,"%s",cadena);

		if (strcmp(cadena, "v") == 0)
		{
			fscanf(archivo,"%Lf",&objeto.vertices[vertice].x);
			fscanf(archivo,"%Lf",&objeto.vertices[vertice].y);
			fscanf(archivo,"%Lf",&objeto.vertices[vertice].z);
			vertice++;
		}

		if (strcmp(cadena, "f") == 0)
		{
			fscanf(archivo,"%i",&objeto.superficies[superficie].indices[0]);
			fscanf(archivo,"%i",&objeto.superficies[superficie].indices[1]);
			fscanf(archivo,"%i",&objeto.superficies[superficie].indices[2]);

			//Le resta 1 a los índices para que inicien en 0
			objeto.superficies[superficie].indices[0]--;
			objeto.superficies[superficie].indices[1]--;
			objeto.superficies[superficie].indices[2]--;

			superficie++;
		}
	}

	return objeto;
}
